/*
 * sysmo 客户端发送的监控值信息
 * Copyright (C) 2009  YuLicheng
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.sysmo.server.node.item;

import java.util.Date;
import org.sysmo.db.DatabaseInterface;
import org.sysmo.db.DbData;
import org.sysmo.server.util.InstanceNotInitializedException;

/**
 * 
 * 此类实例代表一条客户端发送的监控记录。其中包含了此监控记录产生的时间以及与此记录相
 * 关的警告信息。注意：从数据库中读取时，不会读取此记录的警告信息。
 *
 * @author YuLicheng
 */
public class Result {

    /**
     * 数据库接口。
     */
    protected DatabaseInterface dbInterface;
    /**
     * 数据库数据记录对象。
     */
    protected DbData data;

    /**
     * 创建对应的监控记录空实例。
     *
     * @param dbInterface 数据库接口。
     */
    protected Result(DatabaseInterface dbInterface) {
        this.dbInterface = dbInterface;
        this.data = new DbData();
        //TODO: 为DbData确定新建对象的ID。
        data.rid = 0;
        //TODO: 确定数据记录中layer的取值约定
        data.layer = 1;
    }

    /**
     * 从数据库中读取相应ID的记录。
     * 
     * @param dbInterface 数据库接口。
     * @param id 记录ID。
     * @throws ResultNotExistsException 记录ID不存在。
     */
    public Result(DatabaseInterface dbInterface, int id)
            throws ResultNotExistsException {
        this.dbInterface = dbInterface;
        try {
            data = dbInterface.query_DataTable(id);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (data == null) {
            throw new ResultNotExistsException(id);
        }
    }

    /**
     * 通过DbData对象生成Result对象。
     *
     * @param dbInterface 数据库接口。
     * @param data 数据库记录。
     */
    public Result(DatabaseInterface dbInterface, DbData data) {
        this.dbInterface = dbInterface;
        this.data = data;
    }

    /**
     * 获得监控值记录时间。
     *
     * @return 记录时间。
     */
    public Date getTime() {
        if (data == null) {
            throw new InstanceNotInitializedException();
        }
        return DatabaseInterface.convertDate(data.time);
    }

    /**
     * 获得监控值记录。
     *
     * @return 监控值记录。
     */
    public int getValue() {
        if (data == null) {
            throw new InstanceNotInitializedException();
        }
        return data.value;
    }

    /**
     * 获取所属监控值ID。
     *
     * @return 所属监控值ID。
     */
    public int getValueID() {
        if (data == null) {
            throw new InstanceNotInitializedException();
        }
        return data.vid;
    }

    /**
     * 从数据库中删除此记录（同时将删除相应的警告）。
     */
    public void remove() {
        if (data == null) {
            throw new InstanceNotInitializedException();
        }
        try {
            dbInterface.delete_DataTable(data.rid);
            dbInterface.delete_WarningTable(data.rid);
        } catch (Exception e) {
            e.printStackTrace();
        }
        data = null;
    }
}
